home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / Tutorial / Cookbook / 36.Rnd / Random.m < prev    next >
Text File  |  1995-06-12  |  2KB  |  134 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import "Random.h"
  5. #import <stdio.h>
  6. #import <libc.h>
  7. #import <appkit/nextstd.h>
  8. #import <appkit/Control.h>
  9. #import <appkit/Form.h>
  10. #import <appkit/Text.h>
  11. #import <appkit/Matrix.h>
  12. #import <appkit/ScrollView.h>
  13. #import <appkit/Application.h>
  14. extern void srandom();
  15.  
  16. @implementation Random
  17.  
  18. +new {
  19. int i;
  20.     self = [super new];
  21.     [self initialize];
  22.     return self;
  23. }
  24.  
  25. -initialize {
  26. int i;
  27. id tmp_id;
  28.     [self stop:self];
  29.     total = 0;
  30.     average = 0.0;
  31.     numGen = 0;
  32.     [numGenForm setIntValue:numGen];        
  33.     [averageForm setFloatValue:average];
  34.     for (i=0; i<100; i++) {
  35.         numbers[i] = 0;
  36.         tmp_id = [textMatrix findCellWithTag:i];
  37.         [tmp_id setStringValue:"0"];
  38.     }
  39.     srandom(time(0));
  40.     scrollText = [scrollView docView];
  41.     [scrollText setText:""];
  42.     numberText[0] = '\0';
  43. }
  44.  
  45. - setNumGenForm:anObject
  46. {
  47.     numGenForm = anObject;
  48.     return self;
  49. }
  50.  
  51. - setAverageForm:anObject
  52. {
  53.     averageForm = anObject;
  54.     return self;
  55. }
  56.  
  57. - setTextMatrix:anObject
  58. {
  59.     textMatrix = anObject;
  60.     return self;
  61. }
  62.  
  63. - setScrollView:anObject
  64. {
  65.     scrollView = anObject;
  66.     return self;
  67. }
  68.  
  69. void update (teNum, now, myself)
  70. DPSTimedEntry teNum;
  71. double now;
  72. id myself;
  73. {
  74.     [myself doTimedEntry];        
  75. }
  76.  
  77. - doTimedEntry
  78. {
  79. char string[5];
  80. static id this_text;
  81.     newNumber = (random() % 100) + 1;  /* random number from 1 to 100 */
  82.     numGen += 1;
  83.     if (numGen > MAX_COUNT)
  84.         [self stop:self];
  85.     total += newNumber;
  86.     numbers[newNumber]++;
  87.     average = (float) total / (float) numGen;
  88.     [numGenForm setIntValue:numGen];        
  89.     [averageForm setFloatValue:average];
  90.     this_text = [textMatrix findCellWithTag:newNumber];
  91.     sprintf(string, "%d", numbers[newNumber]);
  92.     [this_text setStringValue:string];
  93.     sprintf(string, "%d\n", newNumber);
  94.     strcat(numberText, string);
  95.     [scrollText setText:numberText];
  96.  
  97. }
  98.  
  99. // Good programming practice. Free what you create!
  100. - free
  101. {
  102.     [self stop:self];
  103.     return [super free];
  104. }
  105.  
  106.  
  107.  
  108. - start:sender
  109. {
  110.     if (!running) {
  111.         running = 1;
  112.         clockTE = DPSAddTimedEntry(0.0, &update, self, NX_MODALRESPTHRESHOLD);
  113.     }
  114.     return self;
  115. }
  116.  
  117. - stop:sender
  118. {
  119.     if (running) {
  120.         running = 0;
  121.         DPSRemoveTimedEntry (clockTE);
  122.     }
  123.     return self;
  124. }
  125.  
  126.  
  127. - reset:sender
  128. {
  129.     [self initialize];
  130.     return self;
  131. }
  132.  
  133. @end
  134.